/*
 * @Author: 吴世扬 18368095041@163.com
 * @Date: 2025-02-20 17:46:20
 * @LastEditors: 吴世扬 18368095041@163.com
 * @LastEditTime: 2025-02-24 15:24:05
 * @FilePath: /vue3-admin-server/src/common/dto/user.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

import {
    IsBoolean,
    IsEnum,
    IsNotEmpty,
    IsNumber,
    IsString,
    IsEmail,
    IsArray
} from 'class-validator';
import { PageDTO } from 'src/common/dto';
import { UserEntity } from 'src/entities/user.entity';
import { GenderEnum } from 'src/common/constants';

export class UserListDTO extends PageDTO<UserEntity> {
    @IsString({ message: '用户名必须为字符串' })
    username?: string;

    @IsBoolean({ message: '状态必须为布尔值' })
    valid?: boolean;

    @IsNumber({}, { message: '角色ID必须为数字' })
    roleId?: number;

    @IsNumber({}, { message: '部门ID必须为数字' })
    departmentId?: number;

    // @IsNumber({}, { message: '头像ID必须为数字' })
    // avatarId?: number;

    // @IsString({ message: '小程序openid' })
    // openId?: string;

    // @IsString({ message: '备注' })
    // @IsNotEmpty({ message: '备注不能为空' })
    // remark: string;

    // @IsEnum(GenderEnum, { message: '性别必须是有效的性别枚举值' })
    // @IsNotEmpty({ message: '性别不能为空' })
    // gender: GenderEnum;

    // @IsString({ message: '邮箱必须为字符串' })
    // @IsEmail({}, { message: '请传入正确的邮箱格式' })
    // email?: string;

    // @IsNotEmpty({ message: '手机号不能为空' })
    // @IsString({ message: '手机号必须为字符串' })
    // mobile: string;
}

export class UserDTO {
    @IsNumber(undefined, {
        message: '菜单id必须为数字'
    })
    id?: number;

    @IsString({ message: '用户名必须为字符串' })
    username?: string;

    @IsBoolean({ message: '状态必须为布尔值' })
    valid?: boolean;

    @IsArray({ message: '角色ID列表必须为数组' })
    @IsNumber({}, { each: true, message: '角色ID必须为数字' })
    roleIds?: number[];

    @IsArray({ message: '部门ID列表必须为数组' })
    @IsNumber({}, { each: true, message: '部门ID必须为数字' })
    deptIds?: number[];

    @IsNumber({}, { message: '头像ID必须为数字' })
    avatarId?: number;

    @IsString({ message: '小程序openid' })
    openId?: string;

    @IsString({ message: '备注' })
    remark: string;

    @IsEnum(GenderEnum, { message: '性别必须是有效的性别枚举值' })
    @IsNotEmpty({ message: '性别不能为空' })
    gender: GenderEnum;

    @IsString({ message: '邮箱必须为字符串' })
    @IsEmail({}, { message: '请传入正确的邮箱格式' })
    email?: string;

    @IsNotEmpty({ message: '手机号不能为空' })
    @IsString({ message: '手机号必须为字符串' })
    mobile: string;
}
